/*
 * IMStorage.nc -- abstract data interface
 *
 * Copyright (C) Andrey Vihrov <andrey.vihrov@gmail.com>, 2010
 * Copyright (C) Askar Salimbaev <ghostinshell@gmail.com>, 2010
 *
 * This file is part of Intermote.
 *
 * Intermote is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Intermote is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Intermote.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <AM.h>
#include <TinyError.h>

#include <Intermote.h>

interface IMStorage {

	/**
	 * Open a stream associated with node with address @id
	 */
	command void open (am_addr_t node);

	/**
	 * Reposition the read pointer of a stream
	 */
	command void rseek (im_off_t offset);

	/**
	 * Read a data chunk from stream
	 */
	command void read (struct im_chunk *buf);

	/**
	 * Write a data chunk to the stream
	 */
	command void write (const struct im_chunk *buf);

	/**
	 * Reserve no more than @count copies for each data block
	 */
	command void reserve (uint8_t count);

	/**
	 * Free all data blocks preceding current stream read pointer position
	 */
	command void drop (void);


	/* Command completion events */

	event void openDone (error_t err);
	event void rseekDone (error_t err);
	event void readDone (error_t err);
	event void writeDone (error_t err);
	event void dropDone (error_t err);

}
